package com.fiap.seguranca.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import javax.persistence.TypedQuery;

import com.fiap.jpautil.JpaUtil;
import com.fiap.seguranca.bean.Usuario;

public class UsuarioDaoImpl implements UsuarioDao {
	
	private final GenericDao<Usuario> dao;
	EntityManager em = new JpaUtil().getEntityManager();
	
	public UsuarioDaoImpl(){
		dao = new GenericDao<Usuario>(em, Usuario.class);
	}

	@Override
	public Usuario inserir(Usuario usuario) {

		return dao.salvar(usuario);	
	}
	
	public Long buscarIdPeloLogin(String parametro){		

		Query query = em.createQuery("select u.id_usuario from tb_usuario u where u.login =:pLogin");
		query.setParameter("pLogin", parametro);
		
		return  (Long) query.getSingleResult(); 

	}
	
	public Usuario buscar(long id){		
		return dao.buscar(id);	
	}
	
	public Usuario promover(Usuario usuario){
		return dao.update(usuario);
	}
	
	public List lista(){
		return dao.lista();
	}
	
	public List<Usuario> buscarFuncionarios(){		

		TypedQuery<Usuario> query = em.createQuery("from tb_usuario l where l.funcao = 'funcionario'", Usuario.class);
		
		return query.getResultList(); 
	}
	
public boolean validaLogin(Usuario usuario){
		
		Usuario user = null;
		
		try{
	
			Query q = em.createQuery("select u from tb_usuario u where u.login =:pNome and u.senha =:pSenha");
			q.setParameter("pNome",usuario.getLogin());
			q.setParameter("pSenha", usuario.getSenha());
			user = (Usuario) q.getSingleResult();
		
			if(user!=null){
				usuario.setNome(user.getNome());
				usuario.setFuncao(user.getFuncao());
				usuario.setEmail(user.getEmail());
				usuario.setId_usuario(user.getId_usuario());
				return true;
			}else{
				return false;
			}
		}catch (Exception e) {
			e.printStackTrace();
			return false;

		} finally {

			em.close();
		}	
		
	}

@Override
public Usuario update(Usuario usuario) {
	// TODO Auto-generated method stub
	return dao.update(usuario);	
}

	
}
